Linear Search 非常常見,甚至在學迴圈時就已經用過了。以下直接給範例練習!
給定一個數字陣列 array 與一個數字 n,求出 n 是否在 array 中。回傳 true 或 false。
function linearSearch(array, n){
for (let i = 0; i < array.length; i++) {
    if (n === array[i]) {
        return true
    }
}
return false;
}
最基本的搜尋方式,耗費的時間隨著輸入的資料而增長,時間複雜度為 O(n)。
Binary Search 是一種更快的搜尋方式,比起 Liner Search 每次查找時只會排除一個元素,Binary Search 每次查找比對後可以排除掉當前資料量的一半元素。但 Binary Search 只能用在排序過的資料。
先前 Day 7 - Divide and Conquer 章節有提到過,可回去複習後實作以下練習。
給定一個已排序過的數字陣列 array 與一個數字 n,求出 n 是否在 array 中。回傳 true 或 false。
function binarySearch(array, n){
let start = 0,
  end = array.length - 1,
  middle = Math.floor(array.length / 2);
while (start <= end) {
  if (array[middle] === n) {
      return true;
  } else if (array[middle] > n) {
      end = middle - 1;
  } else {
      start = middle + 1;
  }
  middle = Math.floor((start + end) / 2);
}
return false;
}
Binary Search 時間複雜度為 O(log n)。
每次比對時,排除一半元素。若陣列有 32 個元素,最差的情況會比對 5 次。若陣列有 128 個元素,最差的情況會比對 7 次。
在輸入資料增長的情況下,Binary Search 所需比對的次數增長幅度少很多。